package Java.Lock;


import java.util.concurrent.TimeUnit;

//死锁:两个或两个以上进程在执行过程中，因为争夺资源造成一种互相等待的现象，如果没有外力干涉，他们无法执行下去

/**
 * 原因
 * 1.系统资源不足
 * 2.资源分配不当
 * 3.进程运行推进顺序不合适
 */

//解决死锁  jps _l,  jstack + (死锁线程号)
public class DeadLock {

    //创建两个对象
    static Object a = new Object();
    static Object b = new Object();

    public static void main(String[] args) {

        new Thread(() -> {
            synchronized (a) {
                System.out.println(Thread.currentThread().getName() + "持有锁a，试图获取锁b");
                try {
                    //睡眠1秒
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (b) {
                    System.out.println(Thread.currentThread().getName() + "获取锁b");
                }
            }
        }, "A").start();

        new Thread(() -> {
            synchronized (b) {
                System.out.println(Thread.currentThread().getName() + "持有锁b，试图获取锁a");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (a) {
                    System.out.println(Thread.currentThread().getName() + "获取锁a");
                }
            }
        }, "B").start();

    }
}
